package dp;

public class maxProduct {
    public int maxProduct(int[] nums) {
        //三种情况，正数 0 负数 ，只要是正数就可以一直累乘
        //可以负负得正
        //需要连续
        int max=nums[0],min=nums[0],ans=nums[0];
        for(int i=1;i<nums.length;i++){
            int mx=max,mn=min;
            //新来的数有正有负，如果是正的，跟max相乘得最大值，如果是负的，跟min乘得最大值
            //比如前面全是0，来了个正数，就能取到nums[i]
            //来了个0，大家都变0了，因此不用担心会续上前面的问题
            max=Math.max(nums[i]*mx, Math.max(nums[i], nums[i]*mn));
            min=Math.min(nums[i]*mn, Math.min(nums[i], mx*nums[i]));
            ans=Math.max(ans, max);
        }
        return ans;
        
    }
    public static void main(String[] args) {
        maxProduct obj = new maxProduct();
        // int[] nums = new int[]{-2,3,-4,-8};
        // int[] nums = new int[]{-2,3,4};

        // int[] nums = new int[]{-2,0,-1};
        int[] nums = new int[]{-2,1,2,0,3,2,-1,8};
        // int[] nums = new int[]{-2,0,-1};
        // int[] nums = new int[]{2,3,-2,4};
        System.out.println(obj.maxProduct(nums));
    }
}
